#include <gtkmm.h>

class MyWindow : public Gtk::Window {
public:
    MyWindow() {
        set_title("GtkRadioButton Example");  // 设置窗口标题
        set_default_size(200, 150);  // 设置窗口默认大小

        Gtk::Box* vbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 10));  // 创建垂直盒子容器
        add(*vbox);  // 将盒子容器添加到窗口

        // 创建单选按钮组
        Gtk::RadioButton::Group group;

        // 创建第一个单选按钮，并将其加入组
        radio_button1 = Gtk::manage(new Gtk::RadioButton(group, "Option 1"));
        vbox->pack_start(*radio_button1);  // 将第一个单选按钮添加到盒子容器中

        // 创建第二个单选按钮，并将其加入组
        radio_button2 = Gtk::manage(new Gtk::RadioButton(group, "Option 2"));
        vbox->pack_start(*radio_button2);  // 将第二个单选按钮添加到盒子容器中

        // 创建第三个单选按钮，并将其加入组
        radio_button3 = Gtk::manage(new Gtk::RadioButton(group, "Option 3"));
        vbox->pack_start(*radio_button3);  // 将第三个单选按钮添加到盒子容器中

        // 连接单选按钮状态改变事件的信号处理函数
        radio_button1->signal_toggled().connect(sigc::mem_fun(*this, &MyWindow::on_button_toggled));
        radio_button2->signal_toggled().connect(sigc::mem_fun(*this, &MyWindow::on_button_toggled));
        radio_button3->signal_toggled().connect(sigc::mem_fun(*this, &MyWindow::on_button_toggled));

        show_all_children();  // 显示所有子控件
    }

    virtual ~MyWindow() {}

protected:
    // 单选按钮状态改变事件处理函数
    void on_button_toggled() {
        if (radio_button1->get_active()) {
            set_title("Option 1 selected");  // 当第一个按钮被选中时，修改窗口标题
        } else if (radio_button2->get_active()) {
            set_title("Option 2 selected");  // 当第二个按钮被选中时，修改窗口标题
        } else if (radio_button3->get_active()) {
            set_title("Option 3 selected");  // 当第三个按钮被选中时，修改窗口标题
        }
    }

    Gtk::RadioButton* radio_button1;  // 第一个单选按钮控件指针
    Gtk::RadioButton* radio_button2;  // 第二个单选按钮控件指针
    Gtk::RadioButton* radio_button3;  // 第三个单选按钮控件指针
};

int main(int argc, char *argv[]) {
    auto app = Gtk::Application::create(argc, argv, "com.example.GtkRadioButtonExample");  // 创建 GTK 应用程序实例

    MyWindow window;  // 创建主窗口实例

    return app->run(window);  // 运行应用程序
}

